(function() {
    window.Game = function() {
        // 设置行和列
        this.row = 20;
        this.col = 12;
        // 初始化
        this.initTable();

        // 实例地图
        this.map = new Map()

        // 实例方块
        this.blocks = new Block();

        // 实例下一个方块
        this.nextBlock = new Block()

        // 启动定时器
        this.start()

        // 监听方向
        this.bindEvent();

        // 分数
        this.score = 0;
        // 速度
        this.during = 30
    };
    // 表格初始化
    Game.prototype.initTable = function() {
        // 设置table表格
        let $table = $('<table></table>');
        $table.addClass('tab1')
        for (let i = 0; i < this.row; i++) {
            let $tr = $('<tr></tr>');
            for (let j = 0; j < this.col; j++) {
                let $td = $('<td></td>');
                $tr.append($td)
            }
            $table.append($tr)
        }

        // 初始化预览窗口
        let table2 = $('<table></table>');
        table2.addClass('tab2')
        for (let i = 0; i < 4; i++) {
            let tr = $('<tr></tr>');
            for (let j = 0; j < 4; j++) {
                let td = $('<td></td>');
                tr.append(td)
            }
            table2.append(tr)
        }
        $('body').append($table)
        $('body').append(table2)
    }

    // 设置方块颜色
    Game.prototype.setColor = function(row, col, num) {
        $('.tab1').find('tr').eq(row).children('td').eq(col).addClass('c' + num)
    }

    // 设置预览框方块颜色
    Game.prototype.setNextColor = function(row, col, num) {
        for (let i = 0; i < 4; i++) {
            for (let j = 0; j < 4; j++) {
                if (this.nextBlock.code[i][j] != 0) {
                    $('.tab2').find('tr').eq(i).children('td').eq(j).addClass('c' + this.nextBlock.code[i][j])
                }
            }
        }
    };

    // 清屏功能()
    Game.prototype.clear = function() {
        for (let i = 0; i < this.row; i++) {
            for (let j = 0; j < this.col; j++) {
                $('.tab1').find('tr').eq(i).children('td').eq(j).removeClass()
            }
        }
        for (let i = 0; i < 4; i++) {
            for (let j = 0; j < 4; j++) {
                $('.tab2').find('tr').eq(i).children('td').eq(j).removeClass()
            }
        }
    };


    // 移动的方向
    Game.prototype.bindEvent = function() {
        let self = this;
        $(document).on('keyup', function(e) {
           //  console.log(e.keyCode);
            if (e.keyCode == 37) {
                // 判断是否有向左移动的能力
                self.blocks.checkLeft()
            } else if (e.keyCode == 39) {
                // 判断是否有向右移动的能力
                self.blocks.checkRight()
            } else if (e.keyCode == 32) {
                // 方块一键到底 空格
                self.blocks.checkBlockEnd();
            } else if (e.keyCode == 38) {
                // 键盘上键进行旋转
                self.blocks.checkRot()
            }

        })
    }

    // 设置一个定时器
    Game.prototype.start = function() {
        let _this = this;
        console.log(this);

        // 帧编号
        this.f = 0;

        this.timer = setInterval(function() {
            _this.f++;
            // 渲染帧编号(改变下落的速度)，让他在30的时候就下落一次
            $('#f').text('帧编号：' + _this.f);

            // console.log(_this.f);
           //  console.log(_this.during);

            // 清屏
            _this.clear();
            ////  console.log(_this.blocks);
            // 渲染方块
            _this.blocks.render();

            // 渲染预览方块
            _this.setNextColor();

            // 渲染地图 (_this主要是把col和row传到map.js来循环出表格行和列)
            _this.map.render(_this);

            // 下落
    
            (_this.f % _this.during == 0) && _this.blocks.checkDown();
        }, 20)
    }




})()